const express = require('express');
const { body, param } = require('express-validator');
const UserController = require('../../controllers/UserController');
const FavoriteController = require('../../controllers/FavoriteController');
const LikeController = require('../../controllers/LikeController');
const UserFollowController = require('../../controllers/UserFollowController');
const { authenticateJWT, authorizeAdmin } = require('../../middleware/auth');

const router = express.Router();

// ====== 第一部分：完全静态路由（必须放在最前面）======
// 管理员接口 - 获取用户列表
router.get('/', authenticateJWT, authorizeAdmin, UserController.getUserList);

// 获取用户统计信息
router.get('/stats', authenticateJWT, UserController.getUserStats);

// ====== 第二部分：/me 相关路由（必须在所有参数化路由之前）======
// 获取当前用户信息
router.get('/me', authenticateJWT, UserController.getUserDetail);

// 获取当前用户发布的视频列表
router.get('/me/videos', authenticateJWT, UserController.getMyVideos);

// 调试路由 - 检查/me路径是否能正确匹配
router.get('/me/debug', authenticateJWT, (req, res) => {
  res.json({ success: true, message: 'Debug route working', userId: req.user.id });
});

// 获取当前用户统计信息
router.get('/me/stats', authenticateJWT, UserController.getUserStats);

// 当前用户收藏相关路由
router.post('/me/favorites/video/:videoId', authenticateJWT, [
  param('videoId').isNumeric().withMessage('视频ID必须是数字')
], FavoriteController.toggleVideoFavorite);
router.get('/me/favorites/videos', authenticateJWT, UserController.getUserFavorites);
router.get('/me/favorites/video/:video_id/check', authenticateJWT, [
  param('video_id').isNumeric().withMessage('视频ID必须是数字')
], UserController.checkIfFavoritedVideo);

// 当前用户点赞相关路由
router.post('/me/likes/video/:videoId', authenticateJWT, [
  param('videoId').isNumeric().withMessage('视频ID必须是数字')
], LikeController.toggleVideoLike);
router.get('/me/likes/videos', authenticateJWT, UserController.getUserLikedVideos);
router.get('/me/likes/video/:video_id/check', authenticateJWT, [
  param('video_id').isNumeric().withMessage('视频ID必须是数字')
], UserController.checkIfLikedVideo);

// 当前用户关注视频相关路由
router.get('/me/following/video/:video_id', authenticateJWT, [
  param('video_id').isNumeric().withMessage('视频ID必须是数字')
], UserController.checkIfFollowingVideo);

// 当前用户信息更新路由
router.put('/me', authenticateJWT, [
  body('username').optional().isLength({ min: 3, max: 50 }).withMessage('用户名长度必须在3-50个字符之间'),
  body('email').optional().isEmail().withMessage('请输入有效的邮箱地址'),
  body('avatar').optional().isURL().withMessage('头像URL格式无效')
], UserController.updateUser);

router.put('/me/password', authenticateJWT, [
  body('currentPassword').notEmpty().withMessage('当前密码不能为空'),
  body('newPassword').notEmpty().withMessage('新密码不能为空').isLength({ min: 8 }).withMessage('密码长度不能少于8个字符')
], UserController.updatePassword);

// ====== 第三部分：/follow 相关路由（/follow前缀，避免与参数化路由冲突）======
router.post('/follow/batch-check', authenticateJWT, [
  body('userIds').isArray().withMessage('userIds必须是数组')
], UserFollowController.batchCheckFollowStatus);

router.post('/follow/:user_id', authenticateJWT, [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserFollowController.toggleFollow);

router.get('/follow/:user_id/check', authenticateJWT, [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserFollowController.checkFollowStatus);

// ====== 第四部分：/:user_id 参数化路由（必须在/me路由之后）======
// 获取指定用户的统计信息和基本资料
router.get('/:user_id/profile', [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserController.getOtherUserStats);

// 获取指定用户的作品列表
router.get('/:user_id/videos', [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserController.getOtherUserVideos);

// 获取指定用户的收藏列表
router.get('/:user_id/favorites', [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserController.getOtherUserFavorites);

// 获取指定用户的点赞列表
router.get('/:user_id/likes', [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserController.getOtherUserLikes);

// 获取用户的关注列表
router.get('/:user_id/following', authenticateJWT, [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserFollowController.getFollowingList);

// 获取用户的粉丝列表
router.get('/:user_id/followers', authenticateJWT, [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserFollowController.getFollowersList);

// 获取用户的关注和粉丝数量
router.get('/:user_id/follow/stats', authenticateJWT, [
  param('user_id').isNumeric().withMessage('用户ID必须是数字')
], UserFollowController.getFollowStats);

// ====== 第五部分：/:id 管理员参数化路由（必须放在所有其他路由最后）======
// 获取指定用户详情
router.get('/:id', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('用户ID必须是数字')
], UserController.getUserDetail);

// 更新指定用户信息
router.put('/:id', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('用户ID必须是数字'),
  body('username').optional().isLength({ min: 3, max: 50 }).withMessage('用户名长度必须在3-50个字符之间'),
  body('email').optional().isEmail().withMessage('请输入有效的邮箱地址'),
  body('avatar').optional().isURL().withMessage('头像URL格式无效')
], UserController.updateUser);

// 更新用户状态
router.put('/:id/status', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('用户ID必须是数字'),
  body('status').notEmpty().withMessage('状态不能为空').isIn(['active', 'inactive', 'banned']).withMessage('无效的状态值')
], UserController.updateUserStatus);

// 更新用户角色
router.put('/:id/role', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('用户ID必须是数字'),
  body('role').notEmpty().withMessage('角色不能为空').isIn(['user', 'admin']).withMessage('无效的角色值')
], UserController.updateUserRole);

// 删除用户
router.delete('/:id', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('用户ID必须是数字')
], UserController.deleteUser);

// 获取用户统计信息（管理员）
router.get('/:id/stats', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('用户ID必须是数字')
], UserController.getUserStats);

module.exports = router;